package me.twoday.library.mine.domain;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * setting에 관한 정보를 저장합니다. 
 * 
 * @author 김학성
 * @since 2012. 4. 18.
 */
public class SettingInfo 
{
	private ArrayList<List<Map<String, ?>>> mSettingList;
	private ArrayList<String> mSuperTitleList;
	private ArrayList<Map<String,?>> mSubRows;
	private Map<String, String> mTempRow;
	
	/**
	 *  SettingInfo 기본 생성자 
	 */
	public SettingInfo()
	{
		mSettingList = new ArrayList<List<Map<String,?>>>();
		mSuperTitleList = new ArrayList<String>();
		mSubRows = null;
	}
	
	/**
	 * 최상위 타이틀을 추가합니다.
	 *
	 * @param superTitle (추가할 단어)
	 */
	public void addSuperTitle(String superTitle)
	{
		mSuperTitleList.add(superTitle);
	}
	
	/**
	 * 새로운 하위 컨텐츠를 만들기 위해 동적할당을 합니다. 
	 *
	 */
	public void createNewSubRows()
	{
		if(mSubRows!= null)
		{
			mSubRows = null;
		}
		mSubRows = new ArrayList<Map<String,?>>();
	}
	
	/**
	 * 세로운 Row를 동적할당한후, 
	 * 하위 컨텐츠에 제목을 추가합니다.
	 *
	 * @param title (제목)
	 */
	public void addSubTitleToRow(String title)
	{
		if(mTempRow!=null)
		{
			mTempRow = null;
		}
		
		mTempRow = new HashMap<String, String>();
		mTempRow.put("title", title);
	}
	
	/**
	 * 하위 컨텐츠에 세부사항을 추가한후 
	 * Rows에 Row를 추가합니다. 
	 *
	 * @param detail (세부사항)
	 */
	public void addSubDetailToRow(String detail)
	{
		mTempRow.put("detail", detail);
		mSubRows.add(mTempRow);
		mTempRow = null;
	}
	
	/**
	 * 추가된 row 묶음을 SettingList에 추가 합니다.
	 *
	 */
	public void addSubRowsToSettingList()
	{
		mSettingList.add(mSubRows);
	}
	
	/**
	 * 정의된 최상위 타이틀 리스트를 얻습니다.
	 *
	 * @return 최상위 타이틀 리스트 
	 */
	public ArrayList<String> getSuperTitleList()
	{
		return mSuperTitleList;
	}
	
	/**
	 * 하위 컨텐츠 리스트들을 얻습니다.
	 *
	 * @return 하위 컨텐츠 리스트들
	 */
	public ArrayList<List<Map<String, ?>>> getSettingList()
	{
		return mSettingList;
	}
	
	/**
	 * 셋팅된 최종 리스트사이즈의 크기를 가져온다.
	 *
	 * @return 최종 리스트 크기 
	 */
	public int settingListSize()
	{
		return mSettingList.size();
	}
	
	public int superTitleListSize()
	{
		return mSuperTitleList.size();
	}
}
